<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('attendance_statistics', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id'); // 用户ID
            $table->unsignedBigInteger('employee_id')->nullable(); // 员工ID

            // 统计周期
            $table->enum('period_type', ['daily', 'monthly', 'yearly']); // 统计周期类型
            $table->date('period_date'); // 统计日期（日统计为具体日期，月统计为月份第一天，年统计为年初）

            // 出勤统计
            $table->integer('work_days')->default(0); // 应出勤天数
            $table->integer('actual_work_days')->default(0); // 实际出勤天数
            $table->integer('absent_days')->default(0); // 缺勤天数
            $table->integer('leave_days')->default(0); // 请假天数

            // 异常统计
            $table->integer('late_count')->default(0); // 迟到次数
            $table->integer('early_leave_count')->default(0); // 早退次数
            $table->integer('late_minutes')->default(0); // 迟到总分钟数
            $table->integer('early_leave_minutes')->default(0); // 早退总分钟数

            // 加班统计
            $table->integer('overtime_hours')->default(0); // 加班小时数
            $table->integer('overtime_minutes')->default(0); // 加班分钟数

            // 补卡统计
            $table->integer('makeup_count')->default(0); // 补卡次数
            $table->integer('approved_makeup_count')->default(0); // 已审批补卡次数

            // 请假统计
            $table->integer('annual_leave_days')->default(0); // 年假天数
            $table->integer('sick_leave_days')->default(0); // 病假天数
            $table->integer('personal_leave_days')->default(0); // 事假天数
            $table->integer('other_leave_days')->default(0); // 其他假天数

            // 考勤分数（基于规则计算）
            $table->decimal('attendance_score', 5, 2)->default(100.00); // 考勤分数

            // 工作时长统计
            $table->integer('total_work_hours')->default(0); // 总工作小时数
            $table->integer('standard_work_hours')->default(0); // 标准工作小时数

            // 班次统计（用于倒班制）
            $table->integer('shift_count')->default(0); // 班次数量
            $table->json('shift_details')->nullable(); // 班次详情

            // 额外统计数据
            $table->json('extra_statistics')->nullable(); // 额外统计数据

            $table->timestamps();

            // 索引
            $table->unique(['user_id', 'period_type', 'period_date'], 'unique_user_period');
            $table->unique(['employee_id', 'period_type', 'period_date'], 'unique_employee_period');
            $table->index(['period_type', 'period_date']);
            $table->index('attendance_score');

            // 外键约束
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->foreign('employee_id')->references('id')->on('employees')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('attendance_statistics');
    }
};
